/**
* promise.all 接收一个数组作为参数，每一项都是promise实例，如果不是，会被resolve 转成promise 实例 。另外可以不是数组
* 但必须是iterator接口，且每个成员都是promise 实例
* 作为参数的promise 实例，自己定义了catch，那么他一旦被reject，就不会出触发 all里面的catch方法 
* 
应用： 在处理多个异步，一个页面需要多个异步，全部返回才显示正常，在此之前显示loading
*
*Promise.all 是一个用于处理多个 Promise 的静态方法，它接收一个 Promise 数组作为参数，并返回一个新的 Promise。下面是 Promise.all 的一些优点和缺点：
Promise.all 的优点和缺点：

优点：

并行执行： Promise.all 可以同时处理多个异步操作，提高了程序的效率，因为它们可以并行执行而无需等待前一个操作完成。

结果收集： 返回一个新的 Promise，当所有的 Promise 都成功解决时，它才会被解决，且返回的结果是一个按照传入顺序排列的结果数组，方便结果的收集和处理。

错误处理： 如果传入的任何一个 Promise 被拒绝（rejected），则返回的 Promise 也会被拒绝，并且会抛出被拒绝的那个 Promise 的结果，这使得错误处理变得简单明了。

缺点：

全部或无结果： 如果传入的 Promise 数组中有一个 Promise 被拒绝，那么整个 Promise.all 就会被拒绝，即使其他 Promise 可能已经完成。这可能会导致一种“全部或无”的情况，无法获取部分成功的结果。

执行顺序不确定： 尽管结果的顺序是有序的，但 Promise.all 并不保证传入的 Promise 在执行过程中的顺序，这可能会导致一些预期之外的行为，特别是对于那些依赖于严格执行顺序的情况。

全部等待： Promise.all 在等待所有的 Promise 完成时会阻塞代码的执行，如果其中一个 Promise 需要较长时间才能完成，那么整个 Promise.all 的执行也会延迟。

综上所述，Promise.all 是一种强大的工具，可以方便地处理多个异步操作，但在使用时需要考虑到其特性和局限性，以便选择合适的使用场景。
*
*
 */
// import Promise from '../src/index.js';
const Promise  = require('../promise.js')

// const p1 = new Promise((resolve, reject) => {
//   resolve("hello");
// })
//   .then((result) => result)
//   .catch((e) => e);

// const p2 = new Promise((resolve, reject) => {
//   // throw new Error('报错了');
//   resolve("nihao");
// })
//   .then((result) => result)
//   .catch((e) => console.log("self", e));

// Promise.all([p1, p2])
//   .then((result) => console.log(result))
//   .catch((e) => console.log(e));
// ["hello", Error: 报错了]

// test
let weak = (time) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(time);
    }, time);
  });
};
//    weak(1000).then((res)=>{console.log('object',res);})
(async()=>{
    let [w1,w2,w3] = await Promise.all([weak(3000), weak(1000), weak(2000)])

    console.log('%c [  ]-42', 'font-size:13px; background:pink; color:#bf2c9f;', w1,w2,w3)

    //   .then((res) => {
    //     console.log("object", res);
    //   })
    //   .catch((err) => console.log("err", err));
})()
// Promise.all = function(values)  {
// return new Promise((resolve, reject) => {
//   let arr = []; // 存放结果的数组级
//   let index = 0; // 根据下标存放结果
//   values.forEach(element => {
//     Promise.resolve(element).then((res) => {
//       arr[index] = res
//       if (++index === values.length) {
//         resolve(arr)
//       }
//     },reject)
//   });


// })
// }
